package client;
/*
 * Input - Parameter - Beispiele
 * -ORBInitialPort 3333 -ORBInitialHost localhost lager quit
 * -ORBInitialPort 3333 -ORBInitialHost localhost lager liste
 * -ORBInitialPort 3333 -ORBInitialHost localhost lager neu user1 fachname
 * -ORBInitialPort 3333 -ORBInitialHost localhost lager einlagern user1 fachname 5
 * -ORBInitialPort 3333 -ORBInitialHost localhost lager auslagern user1 fachname 5
 * -ORBInitialPort 3333 -ORBInitialHost localhost lager demo user fachname
 */


import org.omg.CORBA.*;
import org.omg.CosNaming.*;
import lagern.*;
import lagern.FachPackage.exInvalidCount;
import lagern.FachPackage.exNotEnoughPieces;
import lagern.LagerPackage.exAlreadyExists;
import lagern.LagerPackage.exNotFound;

public class Client {
	public static void demo(Lager lI, String user, Fach lF) throws exAlreadyExists, exNotFound, exInvalidCount, exNotEnoughPieces {
		System.out.println("Start");
			
			//einlagern(lF,"User1", 130);
			//einlagern(lF,"User1", -1);
			
			//lF.auslagern("User1", -2);
			//lF.auslagern("User1", 12);
			//lF.auslagern("User1", 118);
			//lF.auslagern("User1", 1);
			
			//Fach[] hf = lI.holeLagerListe();
			//System.out.println(hf[1]);
			for(int i = 0;i<5000;i++){
				lF.einlagern(user, 1);
				//lI.hole("User1", ""+i);
				
			}
			/*for(int i = 1999;i>=0;i--){
				
				lI.hole("User1", ""+i).einlagern("User1", i);
				
				
			}
			lF.auslagern("User1", 12);
			
			Fach s[] = lI.holeLagerListe();
			for(int i = 0;i<s.length;i++) {
				System.out.println(s[i].toString());
	
			}
			*/

	}
	
	public static void main(String[] args) {
		 
		try {	
			ORB orb = ORB.init(args, null);
			NamingContextExt nc = NamingContextExtHelper.narrow(orb.resolve_initial_references("NameService"));
			org.omg.CORBA.Object obj = nc.resolve_str(args[4]);
			Lager lager =  LagerHelper.narrow(obj);
			if(args[5].equals("quit")){
				lager.quit();
			} else if(args[5].equals("liste")){
				liste(lager);
			} else if(args[5].equals("neu")){
				neu(lager, args[6] , args[7]);
			} else if(args[5].equals("einlagern")){
				einlagern(hole(lager, args[6] , args[7]), args[6], Integer.parseInt(args[8]));
			} else if(args[5].equals("auslagern")){
				auslagern(hole(lager, args[6] , args[7]), args[6], Integer.parseInt(args[8]));
			} else if(args[5].equals("demo")){
				demo(lager, args[6], hole(lager, args[6], args[7]));
			} else {
				System.out.println("Falsch Eingabe der Parameter" );
			}
						
		} catch (Exception ex) {
			System.err.print("=========>" + ex.toString());
			System.exit(1); 
		}

	}
	
	private static void auslagern(Fach lagerfach, String user, int anzahl){
		try {
			lagerfach.auslagern(user, anzahl);
		} catch (exInvalidCount e) {
			System.out.println("Negative Anzahl auslagern nicht moeglich");
		} catch (exNotEnoughPieces e) {
			System.out.println("Nicht genug Teile im Lagerfach");
		}
	}
	
	private static void einlagern(Fach lagerfach, String user, int anzahl){
		try {
			lagerfach.einlagern(user, anzahl);
		} catch (exInvalidCount e) {
			System.out.println("Negative Anzahl einlagern nicht moeglich");
		}
	}
	private static void neu(Lager lager, String user, String name){
		try {
			lager.neu(user, name);
		} catch (exAlreadyExists e) {
			System.out.println("Lagerfach bereits vorhanden");
		}
	}
	
	private static Fach hole(Lager lager, String user, String name){
		Fach lF=null;
		try {
			lF=lager.hole(user, name);
		} catch (exNotFound e) {
			System.out.println("Fach nicht gefunden");
		}
		return lF;
	}
	
	private static void liste(Lager lager){
		Fach lF[]=lager.holeLagerListe();
		for(int i = 0;i<lF.length;i++) {
			System.out.println(lF[i].name() + ": " + lF[i].anzahl());

		}
	}
}
